{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "# 学习曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.random.seed(666)\n",
    "x = np.random.uniform(-3.0, 3.0, size=100)\n",
    "X = x.reshape(-1,1)\n",
    "y = 0.5 * x**2 + x + 2 + np.random.normal(0,1,size=100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x106454748>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection._split import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X,y, random_state=10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(75, 1)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/seamonster/MachineLearningClassicAlgorithmEnv/lib/python3.6/site-packages/scipy/linalg/basic.py:1226: RuntimeWarning: internal gelsd driver lwork query error, required iwork dimension not returned. This is likely the result of LAPACK bug 0038, fixed in LAPACK 3.2.2 (released July 21, 2010). Falling back to 'gelss' driver.\n  warnings.warn(mesg, RuntimeWarning)\n"
     ]
    }
   ],
   "source": [
    "# 慢慢增加训练的样本数，看看\"对训练数据集的预测结果\"以及\"对测试数据集的预测结果\"的变化\n",
    "\n",
    "from sklearn.linear_model.base import LinearRegression\n",
    "from sklearn.metrics.scorer import mean_squared_error\n",
    "\n",
    "train_score = []    # 对训练数据集的预测结果(每一次增加样本后的结果均方误差)\n",
    "test_score = []     # 对测试数据集的预测结果(每一次增加样本后的结果均方误差)\n",
    "for i in range(1,76):\n",
    "    lin_reg = LinearRegression()\n",
    "    lin_reg.fit(X_train[:i], y_train[:i])\n",
    "    \n",
    "    y_train_predict = lin_reg.predict(X_train[:i])\n",
    "    train_score.append(mean_squared_error(y_train[:i], y_train_predict))\n",
    "    \n",
    "    y_test_predict = lin_reg.predict(X_test)\n",
    "    test_score.append(mean_squared_error(y_test, y_test_predict))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1095aed68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 开根号只是为了让数目小一些，方便观察\n",
    "plt.plot([i for i in range(1,76)], np.sqrt(train_score), label='train')\n",
    "plt.plot([i for i in range(1,76)], np.sqrt(test_score), label='test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图就是学习曲线"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 把\"画学习曲线\"提炼成一个函数，以便调用"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_learning_curve(algo, X_train, X_test, y_train, y_test):\n",
    "    \"\"\"\n",
    "    绘制学习曲线\n",
    "    :param algo: 要使用的机器学习算法模型，例如LinearRegression的实例\n",
    "    :param X_train: \n",
    "    :param X_test: \n",
    "    :param y_train: \n",
    "    :param y_test: \n",
    "    :return: \n",
    "    \"\"\"\n",
    "    train_score = []    # 对训练数据集的预测结果(每一次增加样本后的结果均方误差)\n",
    "    test_score = []     # 对测试数据集的预测结果(每一次增加样本后的结果均方误差)\n",
    "    for i in range(1, len(X_train) + 1):\n",
    "        algo.fit(X_train[:i], y_train[:i])\n",
    "        \n",
    "        y_train_predict = algo.predict(X_train[:i])\n",
    "        train_score.append(mean_squared_error(y_train[:i],y_train_predict))\n",
    "        \n",
    "        y_test_predict = algo.predict(X_test)\n",
    "        test_score.append(mean_squared_error(y_test, y_test_predict))\n",
    "    plt.plot([i for i in range(1,len(X_train) + 1)], np.sqrt(train_score), label='train')\n",
    "    plt.plot([i for i in range(1,len(X_train) + 1)], np.sqrt(test_score), label='test')\n",
    "    plt.legend()\n",
    "    plt.axis([0, len(X_train) + 1, 0, 4])\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 线性回归模型的学习曲线"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10989fac8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制一下线性回归模型的学习曲线\n",
    "plot_learning_curve(LinearRegression(), X_train, X_test, y_train, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 多项式回归模型的学习曲线"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2阶多项式回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing.data import PolynomialFeatures\n",
    "from sklearn.preprocessing.data import StandardScaler\n",
    "\n",
    "def PolynomialRegression(degree):\n",
    "    return Pipeline(\n",
    "        [\n",
    "            ('poly', PolynomialFeatures(degree=degree)),\n",
    "            ('std_scaler', StandardScaler()),\n",
    "            ('lin_reg',LinearRegression())\n",
    "        ]\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1095c3978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "poly2_reg = PolynomialRegression(degree=2)\n",
    "plot_learning_curve(poly2_reg, X_train, X_test, y_train, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "与线性回归的学习曲线图相比，此图两条曲线的稳定点比较低，大概1.0左右，而线性回归是1.5以上。这说明使用2阶多项式回归，拟合效果比线性回归好"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 20阶多项式回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10989fa90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "poly20_reg = PolynomialRegression(degree=20)\n",
    "plot_learning_curve(poly20_reg, X_train, X_test, y_train, y_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "训练集的曲线平缓的部分（就是已经拟合得比较好了），测试集的曲线离训练集的曲线比较远，这种情况一般就是过拟合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 总结\n",
    "\n",
    "对比欠拟合，最佳，过拟合3种情况\n",
    "- 欠拟合，与最佳的相比，两条曲线趋于的位置（误差）比最佳的位置（误差）要高一些\n",
    "- 过拟合，与最佳的相比，训练集的误差都是差不多的，甚至比最佳的还要低一些。但是测试集的曲线离训练集的曲线会更远"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
